{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "28dbb5bf-d09c-4f59-8711-40d11c5258bc",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import matplotlib.pyplot as plt\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "21372b0f-ca37-4d38-8c39-00ac0367037e",
   "metadata": {},
   "outputs": [],
   "source": [
    "X = torch.unsqueeze(torch.linspace(0, 2, 100), dim=1)  # 把X变成 (100,1)矩阵便于后续计算\n",
    "y = 3 * X + 5 + 0.2 * torch.randn(X.size())  #后面这段是生成的噪声点\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "46ae5691-9612-4d2c-94c3-bfc88265d328",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "初始 w: -0.47668972611427307\n",
      "初始 b: 1.694993257522583\n"
     ]
    }
   ],
   "source": [
    "# 初始化参数 w 和 b\n",
    "w = torch.randn(1,requires_grad=True)  # 随机初始化\n",
    "b = torch.randn(1,requires_grad=True)#requires_grad=True告诉 autograd：后面要对它们求梯度。不写这个就报错\n",
    "\n",
    "print(\"初始 w:\", w.item())\n",
    "print(\"初始 b:\", b.item())\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "66549122-5118-4462-9af3-9bc94797891a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch  50 | loss=0.034191 | w=3.0058 | b=4.9669\n",
      "epoch 100 | loss=0.033507 | w=2.9721 | b=5.0067\n",
      "epoch 150 | loss=0.033478 | w=2.9652 | b=5.0149\n",
      "epoch 200 | loss=0.033477 | w=2.9638 | b=5.0166\n"
     ]
    }
   ],
   "source": [
    "# 学习率与训练轮数\n",
    "lr = 0.1\n",
    "epochs = 200\n",
    "\n",
    "losses = []\n",
    "\n",
    "for epoch in range(epochs):\n",
    "    # 预测 ŷ = w*X + b\n",
    "    y_pred = w * X + b\n",
    "\n",
    "    # MSE 损失\n",
    "    loss = torch.mean((y - y_pred)**2)# 损失：MSE（均方误差）\n",
    "    losses.append(loss.item())#存损失函数，后续画图用到\n",
    "    loss.backward()# 反向传播，计算 ∂loss/∂w 与 ∂loss/∂b\n",
    "\n",
    "    # 梯度下降更新\n",
    "    with torch.no_grad():#更新参数是纯数值操作，不需要再构图，不然会把“更新动作”也记录进计算\n",
    "        w -= lr * w.grad\n",
    "        b -= lr * b.grad\n",
    "\n",
    "    # 清空上一轮的梯度   PyTorch 的梯度是“累加到 .grad 上”的；若不清零，下一轮会把旧梯度也加上，更新就错了。\n",
    "    w.grad.zero_()\n",
    "    b.grad.zero_()\n",
    "\n",
    "    # 每隔一段打印一次\n",
    "    if (epoch + 1) % 50 == 0:\n",
    "        print(f\"epoch {epoch+1:3d} | loss={loss.item():.6f} | w={w.item():.4f} | b={b.item():.4f}\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "cb4b8870-d0eb-44d1-a28d-ad7c24be4cbc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjMAAAGwCAYAAABcnuQpAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAU51JREFUeJzt3XlcVPX6B/DPMOwKg6g4gyLiLqKimeZSqWFq5k/r3jTL0rTl2qreW+m9lZGVttxsuV0tK60oy24uWYpppaahpIiKmCLhDqKgMyyyOHN+f+AZZ2CWc4YZZvu8Xy9eyZkzZ77Hgebx+32+z6MQBEEAERERkZcKcPcAiIiIiBqDwQwRERF5NQYzRERE5NUYzBAREZFXYzBDREREXo3BDBEREXk1BjNERETk1QLdPQBXMxgMOHv2LCIiIqBQKNw9HCIiIpJAEASUlZUhNjYWAQG25158Ppg5e/Ys4uLi3D0MIiIicsCpU6fQrl07m+f4fDATEREBoO4vIzIy0s2jISIiIil0Oh3i4uKMn+O2+HwwIy4tRUZGMpghIiLyMlJSRJgATERERF6NwQwRERF5NQYzRERE5NV8PmdGKr1ej9raWncPw+sEBQVBqVS6exhEROTH/D6YEQQBRUVFuHTpkruH4rWioqKgVqtZx4eIiNzC74MZMZCJiYlBeHg4P5BlEAQBlZWVKC4uBgBoNBo3j4iIiPyRXwczer3eGMi0bNnS3cPxSmFhYQCA4uJixMTEcMmJiIianF8nAIs5MuHh4W4eiXcT//6Yc0RERO7g18GMiEtLjcO/PyIicie/XmYiIiLydXqDgMyCUhSXVSEmIhQDEqKhDPCtf4QymCEiIvJR6TmFSF2fi0JtlfGYRhWK+eMSMTrJdzZtcJnJhwwbNgyzZs1y9zCIiMgDpOcUYmZallkgAwBF2irMTMtCek6hm0bmfAxmnEBvEJCRX4J12WeQkV8CvUFw95Ds2rp1KxQKBevrEBH5IL1BQOr6XFj6NBKPpa7P9YrPKym4zNRI/jKFR0RE3iOzoLTBjIwpAUChtgqZBaUY1Mn7S5NwZqYR3DmFV1FRgfvvvx/NmzeHRqPBv//9b7PHP//8c/Tv3x8RERFQq9W45557jMXtjh8/juHDhwMAWrRoAYVCgWnTptXdU3o6hg4diqioKLRs2RK333478vPzXXYfRETkfMVl1gMZR87zdG4NZrZv345x48YhNjYWCoUCa9euNXt89erVuPXWW9GyZUsoFApkZ2e7ZZyWuHsK7+mnn8a2bduwbt06/Pjjj9i6dSuysrKMj9fW1mLBggXYv38/1q5di+PHjxsDlri4OHz77bcAgCNHjqCwsBDvvPMOgLogac6cOdizZw9++uknBAQE4I477oDBYHDJfRARkfPFRIQ69TxP59ZlpoqKCvTp0wfTp0/HnXfeafHxoUOHYuLEiXjooYfcMELr3DmFV15ejo8//hhpaWm45ZZbAACffvop2rVrZzxn+vTpxj937NgR7777Lq6//nqUl5ejefPmiI6OBgDExMQgKirKeO5f/vIXs9f65JNP0Lp1a+Tm5iIpKcmp90FERK4xICEaGlUoirRVFv/RrQCgVtVt0/YFbg1mxowZgzFjxlh9/L777gNQtyziadw5hZefn4+amhoMHDjQeCw6OhrdunUzfr937168+OKL2L9/Py5evGicWTl58iQSExOtXjsvLw8vvPACdu/ejQsXLpg9j8EMEZF3UAYoMH9cImamZUEBmAU0YoWZ+eMSfabejM/lzFRXV0On05l9uYInT+FVVFRg1KhRiIyMxBdffIHff/8da9asAQDU1NTYfO64ceNQWlqKZcuWYffu3di9e7ek5xERkWcZnaTBkin9oFaZfw6pVaFYMqWfT21S8bndTAsXLkRqaqrLX8edU3idOnVCUFAQdu/ejfbt2wMALl68iKNHj+Lmm2/GH3/8gZKSEixatAhxcXEAgD179phdIzg4GEBds01RSUkJjhw5gmXLluHGG28EAOzYscPp4ycioqYxOkmDkYlquxWAG1MlOO9cGTq2bu7WWR6fC2bmzZuHOXPmGL/X6XTGD3RncucUXvPmzTFjxgw8/fTTaNmyJWJiYvCvf/0LAQF1E23t27dHcHAw3nvvPfztb39DTk4OFixYYHaN+Ph4KBQKfP/997jtttsQFhaGFi1aoGXLlvjwww+h0Whw8uRJzJ071+njJyKipqMMUNjM3XS0xMgVvQFLt+Xj7S15eHpUNzxycyenjlsOn1tmCgkJQWRkpNmXq7hzCu+NN97AjTfeiHHjxiElJQVDhw7FddddBwBo3bo1VqxYgW+++QaJiYlYtGgR3nzzTbPnt23bFqmpqZg7dy7atGmDxx9/HAEBAfjqq6+wd+9e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WU7JmDFjjH/u3bs3Bg4ciPj4eKxatQozZsxwx1Al69atG7p162b8fvDgwcjPz8fixYvx+eefu3Fkzvfpp58iKioKEyZMMDvuqe/fY489hpycHLfl78jFmRkArVq1glKpxLlz58yOnzt3Dmq12uJz1Gq1zfPF/8q5pqs4cn+iN998E4sWLcKPP/6I3r172zy3Y8eOaNWqFY4dO9boMcvVmHsUBQUFoW/fvsbx+8p7WFFRga+++krS/xjd+R7KZe13MDIyEmFhYU75mfAUX331FR588EGsWrWqwZR+fVFRUejatatXvIeWDBgwwDh2X3kPBUHAJ598gvvuuw/BwcE2z/WE9+/xxx/H999/j19++QXt2rWzea6nfBYymAEQHByM6667Dj/99JPxmMFgwE8//WT2L3dTgwYNMjsfADZv3mw8PyEhAWq12uwcnU6H3bt3W72mqzhyf0BdBvqCBQuQnp6O/v37232d06dPo6SkBBqNxinjlsPRezSl1+tx8OBB4/h94T0E6rZNVldXY8qUKXZfx53voVz2fged8TPhCVauXIkHHngAK1euNNtWb015eTny8/O94j20JDs72zh2X3kPt23bhmPHjkn6B4U73z9BEPD4449jzZo1+Pnnn5GQkGD3OR7zWei0VGIv99VXXwkhISHCihUrhNzcXOHhhx8WoqKihKKiIkEQBOG+++4T5s6dazx/586dQmBgoPDmm28Khw8fFubPny8EBQUJBw8eNJ6zaNEiISoqSli3bp1w4MABYfz48UJCQoJw+fJlj7+/RYsWCcHBwcL//vc/obCw0PhVVlYmCIIglJWVCf/4xz+EjIwMoaCgQNiyZYvQr18/oUuXLkJVVVWT358j95iamips2rRJyM/PF/bu3SvcfffdQmhoqHDo0CHjOd78HoqGDh0qTJo0qcFxT3sPy8rKhH379gn79u0TAAhvvfWWsG/fPuHEiROCIAjC3Llzhfvuu894/p9//imEh4cLTz/9tHD48GHh/fffF5RKpZCenm48x97fWVOTe49ffPGFEBgYKLz//vtmv4eXLl0ynvP3v/9d2Lp1q1BQUCDs3LlTSElJEVq1aiUUFxd7/P0tXrxYWLt2rZCXlyccPHhQeOqpp4SAgABhy5YtxnM86T2Ue3+iKVOmCAMHDrR4TU96/2bOnCmoVCph69atZj9vlZWVxnM89bOQwYyJ9957T2jfvr0QHBwsDBgwQNi1a5fxsZtvvlmYOnWq2fmrVq0SunbtKgQHBws9e/YUfvjhB7PHDQaD8Pzzzwtt2rQRQkJChFtuuUU4cuRIU9yKRXLuLz4+XgDQ4Gv+/PmCIAhCZWWlcOuttwqtW7cWgoKChPj4eOGhhx5y24eESM49zpo1y3humzZthNtuu03Iysoyu543v4eCIAh//PGHAED48ccfG1zL095DcZtu/S/xnqZOnSrcfPPNDZ6TnJwsBAcHCx07dhSWL1/e4Lq2/s6amtx7vPnmm22eLwh129E1Go0QHBwstG3bVpg0aZJw7Nixpr2xq+Te32uvvSZ06tRJCA0NFaKjo4Vhw4YJP//8c4Presp76MjP6KVLl4SwsDDhww8/tHhNT3r/LN0bALPfK0/9LFRcvQEiIiIir8ScGSIiIvJqDGaIiIjIqzGYISIiIq/GYIaIiIi8GoMZIiIi8moMZoiIiMirMZghIiIir8ZghoiIiLwagxkiIiLyagxmiMir6PV6DB48GHfeeafZca1Wi7i4OPzrX/9y08iIyF3YzoCIvM7Ro0eRnJyMZcuW4d577wUA3H///di/fz9+//13BAcHu3mERNSUGMwQkVd699138eKLL+LQoUPIzMzEXXfdhd9//x19+vRx99CIqIkxmCEiryQIAkaMGAGlUomDBw/iiSeewHPPPefuYRGRGzCYISKv9ccff6BHjx7o1asXsrKyEBgY6O4hEZEbMAGYiLzWJ598gvDwcBQUFOD06dPuHg4RuQlnZojIK/3222+4+eab8eOPP+Lll18GAGzZsgUKhcLNIyOipsaZGSLyOpWVlZg2bRpmzpyJ4cOH4+OPP0ZmZiaWLl3q7qERkRtwZoaIvM5TTz2FDRs2YP/+/QgPDwcAfPDBB/jHP/6BgwcPokOHDu4dIBE1KQYzRORVtm3bhltuuQVbt27F0KFDzR4bNWoUrly5wuUmIj/DYIaIiIi8GnNmiIiIyKsxmCEiIiKvxmCGiIiIvBqDGSIiIvJqDGaIiIjIqzGYISIiIq/GYIaIiIi8GoMZIiIi8moMZoiIiMirMZghIiIir8ZghoiIiLza/wOhd8Y8DPeH8QAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最终参数估计：\n",
      "w(斜率) = 2.9638121128082275\n",
      "b(截距) = 5.0166096687316895\n"
     ]
    }
   ],
   "source": [
    "plt.scatter(X.numpy(), y.numpy(), label=\"data\")\n",
    "with torch.no_grad():\n",
    "    y_fit = (w * X + b).numpy()\n",
    "plt.plot(X.numpy(), y_fit, label=\"fit\", linewidth=2)\n",
    "plt.xlabel(\"X\"); plt.ylabel(\"y\"); plt.legend(); plt.show()\n",
    "\n",
    "print(\"最终参数估计：\")\n",
    "print(\"w(斜率) =\", w.item())\n",
    "print(\"b(截距) =\", b.item())\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "dd60de90-2f42-4301-a660-e3a8e58674ae",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAHHCAYAAACle7JuAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAOZNJREFUeJzt3Xl8VPW9//H3TJYJmM2wJCAJq7LI0oIaUxEVIohcK8K9oKUPEWlpJVAlbkWvu22sPiy91Ihci1BtAcG6/NCKAkqsGFCCXAGVTSRUSHAhC2AWMt/fHzAnjGFJMpP5Zsjr+XjM45E558zJ5+RI8va7HZcxxggAACAMuW0XAAAA0FgEGQAAELYIMgAAIGwRZAAAQNgiyAAAgLBFkAEAAGGLIAMAAMIWQQYAAIQtggwAAAhbBBkAABC2CDIA6liwYIFcLpfWr19vuxQAOCWCDAAACFsEGQA4Ca/Xq4qKCttlADgFggyARvv44481cuRIxcfHKzY2VsOGDdPatWv9jqmurtZDDz2kc889VzExMWrTpo0GDx6sFStWOMcUFRVp0qRJ6tSpkzwejzp06KBrr71WX3755Wlr+PzzzzVu3Di1a9dOrVq1Us+ePXXvvfc6+2+66SZ16dKlzucefPBBuVwuv20ul0vTpk3T3//+d51//vnyeDxatmyZkpKSNGnSpDrnKCsrU0xMjO644w5nW2VlpR544AH16NFDHo9Hqampuuuuu1RZWXnaawHQcJG2CwAQnrZs2aJLL71U8fHxuuuuuxQVFaW5c+fq8ssvV15entLT0yUdDQw5OTn6xS9+oYsuukhlZWVav369NmzYoCuvvFKSNHbsWG3ZskXTp09Xly5dtH//fq1YsUKFhYUnDCE+n3zyiS699FJFRUVpypQp6tKli3bu3Klly5bpd7/7XaOu65133tGSJUs0bdo0tW3bVueee66uu+46vfzyy5o7d66io6OdY1999VVVVlbq+uuvl3S0BeenP/2p3n//fU2ZMkW9e/fWpk2bNGvWLG3btk2vvvpqo2oCcAoGAH5g/vz5RpL56KOPTnrM6NGjTXR0tNm5c6ezbe/evSYuLs4MGTLE2TZgwAAzatSok57nwIEDRpJ54oknGlznkCFDTFxcnNm9e7ffdq/X63w9ceJE07lz5zqffeCBB8wPfwVKMm6322zZssVv+1tvvWUkmWXLlvltv/rqq023bt2c9y+88IJxu93mX//6l99xzzzzjJFk1qxZ06DrA3B6dC0BaLCamhq9/fbbGj16tLp16+Zs79Chg372s5/p/fffV1lZmSQpMTFRW7Zs0fbt2094rlatWik6OlqrV6/WgQMH6l3D119/rffee08333yz0tLS/Pb9sMuoIS677DL16dPHb9vQoUPVtm1bvfjii862AwcOaMWKFRo/fryzbenSperdu7d69eqlb775xnkNHTpUkvTuu+82ui4AJ0aQAdBgX3/9tQ4fPqyePXvW2de7d295vV7t2bNHkvTwww+rpKRE5513nvr166c777xTn3zyiXO8x+PRH/7wB7355ptKTk7WkCFD9Pjjj6uoqOiUNXzxxReSpL59+wbxyqSuXbvW2RYZGamxY8fqtddec8a6vPzyy6qurvYLMtu3b9eWLVvUrl07v9d5550nSdq/f39QawVAkAHQxIYMGaKdO3fqueeeU9++ffWXv/xFAwcO1F/+8hfnmNtuu03btm1TTk6OYmJidN9996l37976+OOPA/7+J2udqampOeH2Vq1anXD79ddfr/Lycr355puSpCVLlqhXr14aMGCAc4zX61W/fv20YsWKE76mTp0a4NUA+CGCDIAGa9eunVq3bq2tW7fW2ff555/L7XYrNTXV2eab9bNo0SLt2bNH/fv314MPPuj3ue7du+v222/X22+/rc2bN6uqqkpPPvnkSWvwdWlt3rz5lLWeffbZKikpqbN99+7dp/zcDw0ZMkQdOnTQiy++qG+++UbvvPOOX2uM7xq+++47DRs2TJmZmXVeJ2rBAhAYggyABouIiNDw4cP12muv+U2RLi4u1sKFCzV48GDFx8dLkr799lu/z8bGxqpHjx5OF83hw4frrNXSvXt3xcXFnXLKcrt27TRkyBA999xzKiws9NtnjPE7V2lpqV931r59+/TKK6806Jrdbrf+8z//U8uWLdMLL7ygI0eO1Aky48aN01dffaVnn322zue///57HTp0qEHfE8Dpuczx/+IBQEcfUTBp0iTdcsst6tixY539t956qwoLC5Wenq7ExERNnTpVkZGRmjt3rr766iu/6dfJycm6/PLLNWjQICUlJWn9+vX63//9X02bNk2zZ8/Wxo0bNWzYMI0bN059+vRRZGSkXnnlFa1YsUIvvfSSxo4de9I6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1JiOHTuanJwci1UFx/79+40kk5eX52y77LLLzK233mqvqAA98MADZsCAASfcV1JSYqKioszSpUudbZ999pmRZPLz80NUYfDdeuutpnv37sbr9RpjwvseSjKvvPKK897r9ZqUlBTzxBNPONtKSkqMx+MxixYtMsYY8+mnnxpJ5qOPPnKOefPNN43L5TJfffVVyGqvrx9e44l8+OGHRpLZvXu3s61z585m1qxZTVtckJzoGidOnGiuvfbak34mnO5jfe7htddea4YOHeq3LZzu4Q//PtTn9+c///lP43a7TVFRkXPMnDlzTHx8vKmsrAxKXbTINFBVVZUKCgqUmZnpbHO73crMzFR+fr7FyoKjtLRUkpSUlOS3/e9//7vatm2rvn37aubMmTp8+LCN8hpt+/bt6tixo7p166YJEyaosLBQklRQUKDq6mq/+9mrVy+lpaWF7f2sqqrS3/72N918881+D0oN93vos2vXLhUVFfnds4SEBKWnpzv3LD8/X4mJibrgggucYzIzM+V2u7Vu3bqQ1xwMpaWlcrlcSkxM9Nv+2GOPqU2bNvrxj3+sJ554IqhN9qGwevVqtW/fXj179tQtt9yib7/91tl3Jt3H4uJivfHGG5o8eXKdfeFyD3/496E+vz/z8/PVr18/JScnO8eMGDFCZWVl2rJlS1DqOuMfGhls33zzjWpqavxuiiQlJyfr888/t1RVcHi9Xt1222265JJL1LdvX2f7z372M3Xu3FkdO3bUJ598orvvvltbt27Vyy+/bLHa+ktPT9eCBQvUs2dP7du3Tw899JAuvfRSbd68WUVFRYqOjq7zxyE5OVlFRUV2Cg7Qq6++qpKSEt10003OtnC/h8fz3ZcT/Rv07SsqKlL79u399kdGRiopKSks72tFRYXuvvtu3XDDDX4P4/vNb36jgQMHKikpSR988IFmzpypffv26Y9//KPFauvvqquu0pgxY9S1a1ft3LlT99xzj0aOHKn8/HxFREScUffxr3/9q+Li4up0W4fLPTzR34f6/P4sKio64b9V375gIMjAkZWVpc2bN/uNH5Hk1x/dr18/dejQQcOGDdPOnTvVvXv3UJfZYCNHjnS+7t+/v9LT09W5c2ctWbJErVq1slhZ05g3b55Gjhypjh07OtvC/R62ZNXV1Ro3bpyMMZozZ47fvuzsbOfr/v37Kzo6Wr/61a+Uk5MTFkvhX3/99c7X/fr1U//+/dW9e3etXr1aw4YNs1hZ8D333HOaMGGCYmJi/LaHyz082d+H5oCupQZq27atIiIi6ozKLi4uVkpKiqWqAjdt2jS9/vrrevfdd9WpU6dTHpueni5J2rFjRyhKC7rExESdd9552rFjh1JSUlRVVaWSkhK/Y8L1fu7evVsrV67UL37xi1MeF8730HdfTvVvMCUlpc7g+yNHjui7774Lq/vqCzG7d+/WihUr/FpjTiQ9PV1HjhzRl19+GZoCg6xbt25q27at89/lmXIf//Wvf2nr1q2n/XcpNc97eLK/D/X5/ZmSknLCf6u+fcFAkGmg6OhoDRo0SKtWrXK2eb1erVq1ShkZGRYraxxjjKZNm6ZXXnlF77zzjrp27Xraz2zcuFGS1KFDhyaurmkcPHhQO3fuVIcOHTRo0CBFRUX53c+tW7eqsLAwLO/n/Pnz1b59e40aNeqUx4XzPezatatSUlL87llZWZnWrVvn3LOMjAyVlJSooKDAOeadd96R1+t1Qlxz5wsx27dv18qVK9WmTZvTfmbjxo1yu911umPCxb///W99++23zn+XZ8J9lI62kg4aNEgDBgw47bHN6R6e7u9DfX5/ZmRkaNOmTX6B1BfK+/TpE7RC0UCLFy82Ho/HLFiwwHz66admypQpJjEx0W9Udri45ZZbTEJCglm9erXZt2+f8zp8+LAxxpgdO3aYhx9+2Kxfv97s2rXLvPbaa6Zbt25myJAhliuvv9tvv92sXr3a7Nq1y6xZs8ZkZmaatm3bmv379xtjjPn1r39t0tLSzDvvvGPWr19vMjIyTEZGhuWqG66mpsakpaWZu+++2297ON7D8vJy8/HHH5uPP/7YSDJ//OMfzccff+zM2HnsscdMYmKiee2118wnn3xirr32WtO1a1fz/fffO+e46qqrzI9//GOzbt068/7775tzzz3X3HDDDbYuqY5TXWNVVZX56U9/ajp16mQ2btzo92/TN9Pjgw8+MLNmzTIbN240O3fuNH/7299Mu3btzI033mj5ymqd6hrLy8vNHXfcYfLz882uXbvMypUrzcCBA825555rKioqnHM05/t4uv9OjTGmtLTUtG7d2syZM6fO55v7PTzd3wdjTv/788iRI6Zv375m+PDhZuPGjWb58uWmXbt2ZubMmUGrkyDTSH/+859NWlqaiY6ONhdddJFZu3at7ZIaRdIJX/PnzzfGGFNYWGiGDBlikpKSjMfjMT169DB33nmnKS0ttVt4A4wfP9506NDBREdHm3POOceMHz/e7Nixw9n//fffm6lTp5qzzz7btG7d2lx33XVm3759FitunLfeestIMlu3bvXbHo738N133z3hf5cTJ040xhydgn3fffeZ5ORk4/F4zLBhw+pc97fffmtuuOEGExsba+Lj482kSZNMeXm5has5sVNd465du076b/Pdd981xhhTUFBg0tPTTUJCgomJiTG9e/c2v//97/1CgG2nusbDhw+b4cOHm3bt2pmoqCjTuXNn88tf/rLO/xA25/t4uv9OjTFm7ty5plWrVqakpKTO55v7PTzd3wdj6vf788svvzQjR440rVq1Mm3btjW33367qa6uDlqdrmPFAgAAhB3GyAAAgLBFkAEAAGGLIAMAAMIWQQYAAIQtggwAAAhbBBkAABC2CDIAACBsEWQAtDirV6+Wy+Wq84wYAOGHIAMAAMIWQQYAAIQtggyAkPN6vcrJyVHXrl3VqlUrDRgwQC+99JKk2m6fN954Q/3791dMTIwuvvhibd682e8c//jHP3T++efL4/GoS5cuevLJJ/32V1ZW6u6771Zqaqo8Ho969OihefPm+R1TUFCgCy64QK1bt9ZPfvITbd26tWkvHEDQEWQAhFxOTo6ef/55PfPMM9qyZYtmzJihn//858rLy3OOufPOO/Xkk0/qo48+Urt27XTNNdeourpa0tEAMm7cOF1//fXatGmTHnzwQd13331asGCB8/kbb7xRixYt0uzZs/XZZ59p7ty5io2N9avj3nvv1ZNPPqn169crMjJSN998c0iuH0Dw8NBIACFVWVmppKQkrVy5UhkZGc72X/ziFzp8+LCmTJmiK664QosXL9b48eMlSd999506deqkBQsWaNy4cZowYYK+/vprvf32287n77rrLr3xxhvasmWLtm3bpp49e2rFihXKzMysU8Pq1at1xRVXaOXKlRo2bJgk6Z///KdGjRql77//XjExMU38UwAQLLTIAAipHTt26PDhw7ryyisVGxvrvJ5//nnt3LnTOe74kJOUlKSePXvqs88+kyR99tlnuuSSS/zOe8kll2j79u2qqanRxo0bFRERocsuu+yUtfTv39/5ukOHDpKk/fv3B3yNAEIn0nYBAFqWgwcPSpLeeOMNnXPOOX77PB6PX5hprFatWtXruKioKOdrl8sl6ej4HQDhgxYZACHVp08feTweFRYWqkePHn6v1NRU57i1a9c6Xx84cEDbtm1T7969JUm9e/fWmjVr/M67Zs0anXfeeYqIiFC/fv3k9Xr9xtwAODPRIgMgpOLi4nTHHXdoxowZ8nq9Gjx4sEpLS7VmzRrFx8erc+fOkqSHH35Ybdq0UXJysu699161bdtWo0ePliTdfvvtuvDCC/XII49o/Pjxys/P11NPPaWnn35aktSlSxdNnDhRN998s2bPnq0BAwZo9+7d2r9/v8aNG2fr0gE0AYIMgJB75JFH1K5dO+Xk5OiLL75QYmKiBg4cqHvuucfp2nnsscd06623avv27frRj36kZcuWKTo6WpI0cOBALVmyRPfff78eeeQRdejQQQ8//LBuuukm53vMmTNH99xzj6ZOnapvv/1WaWlpuueee2xcLoAmxKwlAM2Kb0bRgQMHlJiYaLscAM0cY2QAAEDYIsgAAICwRdcSAAAIW7TIAACAsEWQAQAAYYsgAwAAwhZBBgAAhC2CDAAACFsEGQAAELYIMgAAIGwRZAAAQNgiyAAAgLD1/wGmI/lQnpaJoAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(losses)\n",
    "plt.xlabel(\"epoch\"); plt.ylabel(\"MSE loss\")\n",
    "plt.title(\"Loss curve\")\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "524a022d-2dda-471b-88a3-0619eb59f397",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3.10 (wwj)",
   "language": "python",
   "name": "wwj"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
